package com.gjintel.framework.role.dao;

import java.util.List;

import com.gjintel.framework.menu.model.RoleModel;
import com.gjintel.framework.role.model.ProjectOperation;
import com.gjintel.framework.role.model.Role;
import com.gjintel.framework.user.model.User;
import com.gjintel.framework.user.model.UserRole;
import com.gjintel.sdk.base.dao.Page;
import com.gjintel.sdk.base.dao.Sort;

/**
 * @description 角色数据访问接口
 * @author fengya
 * @date 2015-7-23 下午04:31:07
 */
public interface IRoleDao {
	/**
	 * @description 分页查找角色信息
	 * @author fengya
	 * @date 2015-8-3 上午10:55:05
	 * @param page
	 * @param role
	 * @param sort
	 * @return void
	 */
	@SuppressWarnings("unchecked")
	void findAll(Page page, Role role, Sort sort);

	/**
	 * @description 查询得到所有的角色信息
	 * @author fengya
	 * @date 2015-8-3 上午10:56:17
	 * @return
	 * @return List<Role>
	 */
	public List<Role> findAll();

	/**
	 * @description 根据角色绑定菜单信息
	 * @author fengya
	 * @date 2015-8-3 上午10:57:40
	 * @param roleId
	 * @return
	 * @return List<RoleModel>
	 */
	List<RoleModel> getRoleModelByRoleId(String roleId);

	/**
	 * @description 根据角色和用户得到绑定的信息
	 * @author fengya
	 * @date 2015-8-3 上午10:57:57
	 * @param roleId
	 * @param userId
	 * @return
	 * @return UserRole
	 */
	UserRole getUserRole(String roleId, String userId);
	
	/**
	 * @description 查询得到除了超级管理员之外的所有的角色信息
	 * @date 2016-3-20 上午10:56:17
	 * @return
	 * @return List<Role>
	 */
	public List<Role> findRoleListExcludeAdmin(String bidderId);

	/**
	 * @description 根据用户id获取使用后的所有角色 
	 * @author wei 
	 * @date 2016-8-17
	 * @param userIdStr
	 * @return
	 */
	public List<Role> findRolesByUserId(String userIdStr);
	
	/**
	 * @description 根据角色id获取此角色的所有用户集合 
	 * @author wei 
	 * @date 2016-8-17
	 * @param RoleId
	 * @return
	 */
	public List<User> findUserByRoleId(String RoleId);

	/**
	 * @description 根据角色id和项目状态获取操作权限集合
	 * @author wei 
	 * @date 2016-9-30
	 * @param roleId
	 * @param status
	 * @return
	 */
	List<ProjectOperation> findOperationByRoleIdAndStatus(String roleIds,
			String status,String workflowKey);
     
	List<Role>getRoleListExcludeAdmin();
}
